package Blog;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.*;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

/**
 * Created with IntelliJ IDEA
 * Description:
 * User:恋恋
 * Date:2023-10-11
 * Time:19:30
 */

//每行加入隐式等待

public class BlogCases extends InitAndEnd{
    // @Test
    //测试用户名是否为admin
    @ParameterizedTest
    @ValueSource(strings = {"name","password","博客页面地址"})
    void LoginSuccess(String name , String password , String Blog_list_url){
        WebDriver webDriver = new ChromeDriver();
        //打开博客登录界面
        webDriver.get("http://42.192.83.143:8563/blog_system/blog_login.html");
        //隐式等待-等待3秒结束，若还没出现，就报错
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号admin
        webDriver.findElement(By.cssSelector("#username")).sendKeys(name);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入密码123
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //点击提交按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //跳转到列表页
        //获取到当前页面url
        String cur_url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //判断当前跳转的列表页是否与预期一样需要Assertions(预期值，实际值)
        //如果url = " ",测试通过，否则测试不通过
        Assertions.assertEquals(Blog_list_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //获取当前用户信息是？，点击用户信息，后用getTest()方法获取
        //列表页展示用户信息是admin
        String cur_admin = webDriver.findElement(By.cssSelector("")).getText();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //如果cur_admin是admin,测试通过，否则测试不通过
        Assertions.assertEquals(name,cur_admin);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);


    }


    /**
     * 博客列表列的博客数量不为0
     */
    @Test
    void BlogList(){
        //打开博客列表页
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //获取页面上所有博客标题(一批)对应的元素的个数
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //如果元素数量不为0，测试通过
        Assertions.assertNotEquals(0,title_num);
    }
    /**
     * 博客详情页校验
     * url
     * 博客标签
     * 页面title是“博客详情页
     */
    @Test
    @ParameterizedTest
    @MethodSource("Generator")
    //创建方法器，来将地址、页面标题、博客标题进行导入
    void BlogDetail(String expected_url , String expected_title , String expected_blog_title){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("");
        //找到第一篇博客对应的查看全文按键
        webDriver.findElement(By.cssSelector("")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //获取当前页面url地址
        String cur_url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //获取当前页面title
        String cur_title = webDriver.getTitle();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //获取博客标题getTest()这个方法可以获取元素 的 名称（字符串）
        String cur_blog_title = webDriver.findElement(By.cssSelector("")).getText();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //校验地址，有一定的容错性,只要包含一些浏览器地址即可
        /**
        Assertions.assertEquals( expected_url , cur_url );
         */
        //改成：
        if(cur_url .contains(expected_url)){
            System.out.println("测试通过");
        }else{
            System.out.println(cur_url);
            System.out.println("测试不通过");
        }
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //校验页面标题
        Assertions.assertEquals( expected_title ,cur_title );
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //校验博客标题
        Assertions.assertEquals( expected_blog_title , cur_blog_title );

    }
    /**
     * 写博客
     */
    void EditBlog(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("");
        //找到写博客按钮，点击
        webDriver.findElement(By.cssSelector("")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);

        //找到输入框输入标题(方法1)——》改成：通过JS将标题进行输入自动化测试（方法2）
         //webDriver.findElement(By.cssSelector("")).sendKeys();
        //Js标题——F12-》Console->输入document.getElementById("title"),value="自动化测试"-》复制
        ((JavascriptExecutor) webDriver).executeScript("document.getElementById(\\\"title\\\").value=\\\"自动化测试\\\"");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //点击发布
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //获取当前页面url
        String cur_url = webDriver.getCurrentUrl();
        //校验当前页面 是否 回到最开始的页面
        Assertions.assertEquals("",cur_url);
    }
    /**
     *校验已发布博客标题
     * 校验已发布博客时间
     */
    @Test
    void BlogInfoChecked(){
        WebDriver webDriver = new ChromeDriver();
        //登录博客界面
        webDriver.get("");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //获取第一篇博客标题
        String first_blog_title = webDriver.findElement(By.cssSelector("")).getText();
        //获取第一篇博客发布时间
        String first_blog_time = webDriver.findElement(By.cssSelector("")).getText();
        //校验博客标题是不是自动化测试
        Assertions.assertEquals("自动化测试",first_blog_title);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //校验博客发布时间
        //第一种
        Assertions.assertEquals("2023-10-12",first_blog_time);
        //第二种
        if(first_blog_time.contains("2023-05-23")){
            System.out.println("测试通过");
        }else{
            System.out.println("当前时间是："+first_blog_time);
            System.out.println("测试不通过");
        }
    }
    /**
     * 删除博客
     */
    @Test
    void DeleteBlog(){
        WebDriver webDriver = new ChromeDriver();
        //登录博客界面
        webDriver.get("");
        //打开博客列表页面
        webDriver.findElement(By.cssSelector("")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //点击全文按钮
        webDriver.findElement(By.cssSelector("")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //点击删除按钮
        webDriver.findElement(By.cssSelector("")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //检查博客列表页第一篇博客标题 是不是 ”自动化测试
        String first_blog_title = webDriver.findElement(By.cssSelector("")).getText();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        Assertions.assertNotEquals("自动化测试",first_blog_title);

    }
    /**
     * 注销
     *
     */
    @Test
    void Logout(){
        WebDriver webDriver = new ChromeDriver();
        //登录博客界面
        webDriver.get("");
        //点击删除按键
        webDriver.findElement(By.cssSelector("")).click();
        //隐式等待
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        //校验url(登录地址)
        String cur_url= webDriver.getCurrentUrl();
        Assertions.assertEquals("",cur_url);
        //校验提交按钮是不是为空的
        WebElement webElement = webDriver.findElement(By.cssSelector(""));
        Assertions.assertNotNull(webElement);

    }
}
